package com.sunshine.service.impl;

import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.sunshine.common.pojo.SearchLog;
import com.sunshine.common.utils.FmmResult;
import com.sunshine.common.utils.LoggerUtils;
import com.sunshine.mapper.AppLogMapper;
import com.sunshine.pojo.Log;
import com.sunshine.service.AppLogService;

/**
 * 日志管理的Service实现类
 * 
 * @author NGU-sunshine
 *
 */
@Service
public class AppLogServiceImpl implements AppLogService {

	// 注入AppLogMapper
	@Autowired
	private AppLogMapper appLogMapper;

	/*
	 * 插入日志
	 * 
	 * @see com.sunshine.service.AppLogService#insertLog()
	 */
	public FmmResult insertLog(Log realAppLog) {

		if (realAppLog == null) {
			// 记录日志
			LoggerUtils.info("插入失败,数据已经全部插入");
			return FmmResult.build(200, "插入失败,数据已经全部插入");
		}
		/*
		 * 假数据 Log appLog = new Log(); appLog.setLogTime(new Date());
		 * appLog.setThreadName("threadName"); appLog.setClassName("22");
		 * appLog.setLogInfo("fsdfs");
		 */
		try {
			//捕获插入异常
			appLogMapper.insertAllColumn(realAppLog);
			LoggerUtils.info("插入成功");
			return FmmResult.build(200, "插入成功");
		} catch (Exception e) {
			//插入失败，日志记录异常
			LoggerUtils.error(e);
		}
		return FmmResult.build(400, "插入失败");
	}

	


	// 分页查询
	public Page<Log> getLogList(SearchLog searchLog) {
		// TODO Auto-generated method stub
		// 设置查询的开始页与结束页
		int currentPage = searchLog.getCurrentPage();
		int pageSize = searchLog.getPageSize();
		Page<Log> page = new Page<Log>(currentPage, pageSize);
		// 设置查询条件
		// 建立条件类
		EntityWrapper<Log> ew = new EntityWrapper<Log>();
		// 日志详情（模糊查询），logInfo
		String logInfo = searchLog.getLogInfo();
		// 日志时间（起始时间和截止时间，startLogTime,endLogTime截止时间必须晚于起始时间），
		// 起始时间
		String startLogTime = searchLog.getStartLogTime();
		// 截止时间
		String endLogTime = searchLog.getEndLogTime();
		// 类名，className
		String className = searchLog.getClassName();
		// 日志级别（下拉框，DEBUG/ERROR/INFO） logLeval
		//// DEBUG 0;ERROR 1;INFO 2
		String logLeval = searchLog.getLogLeval();
		// 添加日志模糊查询条件
		if (StringUtils.isNotBlank(logInfo)) {
			ew.like("log_info", logInfo);
		}
		// 添加日志时间查询条件
		if (StringUtils.isNotBlank(startLogTime) && StringUtils.isNotBlank(endLogTime)) {
			ew.between("log_time", startLogTime, endLogTime);
		}
		// 添加日志类名查询条件
		if (StringUtils.isNotBlank(className)) {
			ew.eq("class_name", className);
		}
		// 添加日志级别查询条件
		if (StringUtils.isNotBlank(logLeval)) {
			if (logLeval.equals("0")) {
				ew.eq("log_leval", "DEBUG");
			}
			if (logLeval.equals("1")) {
				ew.eq("log_leval", "ERROR");
			}
			if (logLeval.equals("2")) {
				ew.eq("log_leval", "INFO");
			}
		}
		// 根据查询条件获取查询结果集
		List<Log> result = appLogMapper.selectPage(page, ew);
		// 把查询结果集封装到page对象中
		page.setRecords(result);
		// 返回page对象
		return page;
	}

}
